package com.example.goodrubish;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class login extends AppCompatActivity {

    SharedPreferences sp;

    private EditText et_name;
    private EditText et_pwd;
    private CheckBox cb_remeberpwd;
    private CheckBox cb_autologin;
    private Button bt_register;
    private Button bt_login;
    //用户名，密码，加密密码
    private String userName, password, spPsw;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_Goodrubish);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        //获取首选项 sp
        sp = getSharedPreferences("config", Context.MODE_PRIVATE);
        //初始化
        initView();
        //第二次打开的时候，从sp获取数据，进行画面的同步
        boolean rememberpwd = sp.getBoolean("remeberpwd", false); //获取为空则为false
        boolean autologin = sp.getBoolean("autologin", false);

        //记住密码
        if (rememberpwd) {
            String pwd = sp.getString("pwd", null);
            et_pwd.setText(pwd);
            //获取sp里的 name 和 pwd 并且保存到 EditText 上
            String name = sp.getString("name", null);
            et_name.setText(name);
            //记住密码打钩
            cb_remeberpwd.setChecked(true);
        }

        //自动登录
        if (autologin) {
            cb_autologin.setChecked(true);
            String pwd = sp.getString("pwd", null);
            et_pwd.setText(pwd);
            String name = sp.getString("name", null);
            et_name.setText(name);
            //自动登录
            startActivity(new Intent(login.this, MainActivity.class));
        }
    }

    private void initView() {
        //找到控件
        et_name = findViewById(R.id.et_name);
        et_pwd = findViewById(R.id.et_pwd);
        cb_remeberpwd = findViewById(R.id.cb_remeberpwd);
        cb_autologin = findViewById(R.id.cb_autologin);
        bt_register = findViewById(R.id.bt_register);
        bt_login = findViewById(R.id.bt_login);

        //设置监听
        MyOnClickListener l = new MyOnClickListener();
        bt_login.setOnClickListener(l);
        bt_register.setOnClickListener(l);
    }

    private class MyOnClickListener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.bt_register:
                    //跳转到主界面，登录成功的状态传递到 MainActivity 中
                    startActivity(new Intent(login.this, Register.class));
                    break;

                case R.id.bt_login:
                    //登录操作
                    //获取账号和密码
                    String name = et_name.getText().toString().trim();
                    String pwd = et_pwd.getText().toString().trim();
                    if (TextUtils.isEmpty(name) || TextUtils.isEmpty(pwd)) {
                        Toast.makeText(login.this, "用户名或者密码为空", Toast.LENGTH_SHORT).show();
                    } else {
                        // md5Psw ; spPsw 为 根据从SharedPreferences中用户名读取密码
                        // 定义方法 readPsw为了读取用户名，得到密码
                        String md5Psw = MD5Utils.md5(pwd);
                        spPsw = readPsw(name);
                        //对当前用户输入的密码进行MD5加密再进行比对判断, MD5Utils.md5( ); psw 进行加密判断是否一致
                        if (md5Psw.equals(spPsw)) {
                            //记住密码打钩没有
                            if (cb_remeberpwd.isChecked()) {
                                //sp保存账号和密码 还有记住密码的状态
                                SharedPreferences.Editor editor = sp.edit();
                                editor.putString("name", name);
                                editor.putString("pwd", pwd);
                                editor.putBoolean("remeberpwd", true);
                                editor.apply();
                            }
                            if (cb_autologin.isChecked()) {
                                SharedPreferences.Editor editor = sp.edit();
                                editor.putBoolean("autologin", true);
                                editor.apply();
                            }

                            Toast.makeText(login.this, "登录成功", Toast.LENGTH_SHORT).show();
                            //保存登录状态，在界面保存登录的用户名 定义个方法 saveLoginStatus boolean 状态 , userName 用户名;
                            saveLoginStatus(true, name);
                            //登录成功后关闭此页面进入主页
                            Intent data = new Intent();
                            //datad.putExtra( ); name , value ;
                            data.putExtra("isLogin", true);
                            //RESULT_OK为Activity系统常量，状态码为-1
                            // 表示此页面下的内容操作成功将data返回到上一页面，如果是用back返回过去的则不存在用setResult传递data值
                            setResult(RESULT_OK, data);
                            //销毁登录界面
                            login.this.finish();
                            //跳转到主界面，登录成功的状态传递到 MainActivity 中
                            startActivity(new Intent(login.this, MainActivity.class));
                            return;
                        } else {
                            Toast.makeText(login.this, "用户名和密码不一致", Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
            }
        }
    }

    private void saveLoginStatus(boolean status, String name) {
        //saveLoginStatus(true, userName);
        //loginInfo表示文件名  SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);
        SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
        //获取编辑器
        SharedPreferences.Editor editor = sp.edit();
        //存入boolean类型的登录状态
        editor.putBoolean("isLogin", status);
        //存入登录状态时的用户名
        editor.putString("loginUserName", userName);
        //提交修改
        editor.commit();
    }

    private String readPsw(String name) {
        SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
        return sp.getString(name, "");
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //super.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null) {
            //是获取注册界面回传过来的用户名
            // getExtra().getString("***");
            String name = data.getStringExtra("name");
            if (!TextUtils.isEmpty(name)) {
                //设置用户名到 et_name 控件
                et_name.setText(name);
                //et_name控件的setSelection()方法来设置光标位置
                et_name.setSelection(name.length());
            }
        }
    }
}